home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Shareware / IDimager Personal 4.2.0.3 / setup_IDimager_Personal_V4.exe / {app} / Scripts / Version Scripts / Open Versions With.psc < prev    next >
Text File  |  2006-12-15  |  6KB  |  192 lines

  1. (*
  2. ' *************************************************************************
  3. ' * Scriptname: Open Versions With
  4. ' * Author: HB van Zwietering
  5. ' * Version: 1.0
  6. ' * Date: 15-December-2006
  7. ' *
  8. ' * Description: The script allows to select one or more versions from one or more selected
  9. ' * version stacks and then allows to open the selected images in an external application
  10. ' *
  11. ' * Known Issues:
  12. ' *   -
  13. ' *************************************************************************/
  14. *)
  15.  
  16.  
  17. function AddFileName (AList: TStringList; AFileName: String): Integer;
  18. begin
  19.   result := AList.IndexOf (AFileName);
  20.  
  21.   if result = -1 then        // doesn't exist yet?
  22.     result := AList.Add (AFileName);
  23. end;
  24.  
  25. function AskApp (AApps, AList: TStringList; var AParams: String): String;
  26. var
  27.   AForm: TForm;
  28.   APanel: TPanel;
  29.   AOk: TButton;
  30.   ARg: TRadioGroup;
  31.   ALb: TListBox;
  32.   i: Integer;
  33.   ARegKey: String;
  34. begin
  35.   result := '';
  36.   AParams := '';
  37.  
  38.   ARegKey := 'scripts\openversionwith\' + ExtractFileExt (AList.Strings[0]);
  39.  
  40.   AForm := TForm.Create(nil);
  41.   AForm.Caption := 'Open Versions With...';
  42.   AForm.Width :=  ReadFromRegistry ('scripts\openversionwith\', 'Width', 600);
  43.   AForm.Height := ReadFromRegistry ('scripts\openversionwith\', 'Height', 400);
  44.   AForm.Position := poScreenCenter;
  45.  
  46.   APanel := TPanel.Create (AForm);
  47.   APanel.Parent := AForm;
  48.   APanel.Align := alBottom;
  49.   APanel.Height := 35;
  50.  
  51.   AOk := TButton.Create (AForm);
  52.   AOk.Caption := 'Ok';
  53.   AOk.ModalResult := mrOk;
  54.   AOk.Parent := APanel;
  55.   AOk.Top := 6;
  56.   AOk.Left := 6;
  57.  
  58.   ALb := TListBox.Create (AForm);
  59.   ALb.Parent := AForm;
  60.   ALb.Align := alClient;
  61.   for i := 0 to AList.Count - 1 do
  62.     ALb.Items.Add (AList.Strings[i]);
  63.   ALb.MultiSelect := True;
  64.   ALb.SelectAll;
  65.  
  66.   ARg := TRadioGroup.Create (AForm);
  67.   ARg.Parent := AForm;
  68.   ARg.Caption := 'open with';
  69.   //ARg.Items.AddStrings (AApps);
  70.   for i := 0 to AApps.Count - 1 do
  71.     ARg.Items.Add (ChangeFileExt (ExtractFileName (AApps.Strings[i]), ''));
  72.   ARg.Height := 30 + (AApps.Count * (AForm.Canvas.TextHeight ('X') + 5));
  73.   ARg.ItemIndex := ReadFromRegistry (ARegKey, 'LastApp', 0);
  74.   if ARg.ItemIndex = -1 then
  75.     ARg.ItemIndex := 0;
  76.   ARg.Align := alBottom;
  77.  
  78.   ForceForegroundWindow (AForm.Handle);
  79.  
  80.   AForm.ShowModal;
  81.  
  82.   if AForm.ModalResult = mrOk then
  83.   begin
  84.     WriteToRegistry ('scripts\openversionwith\', 'Width', AForm.Width);
  85.     WriteToRegistry ('scripts\openversionwith\', 'Height', AForm.Height);
  86.     WriteToRegistry (ARegKey, 'LastApp', ARg.ItemIndex);
  87.  
  88.     result := AApps.Strings[ARg.ItemIndex];
  89.  
  90.     // return all the selected images
  91.     for i := 0 to ALb.Items.Count - 1 do
  92.     begin
  93.       if ALb.Selected[i] then
  94.         AParams := AParams + iif (AParams = '', '', ' ') + '"' + AList.Strings[i] + '"';
  95.     end;
  96.   end;
  97.  
  98.   AForm.Free;
  99. end;
  100.  
  101. function DoOpenWith (AList: TStringList): Integer;
  102. var
  103.   ATemp, CustomOpenWithPrograms: TStringList;
  104.   AApp, AParams: String;
  105.   ShellObj: OleVariant;
  106.   i, j: Integer;
  107. begin
  108.   // returns the result code from the calling application
  109.   result := -1;
  110.  
  111.   CustomOpenWithPrograms := TStringList.Create;
  112.   CustomOpenWithPrograms.CaseSensitive := False;
  113.  
  114.   // find the registered Open With programs for each file extension found and build a unique list of
  115.   // applications from it
  116.   ATemp := TStringList.Create;
  117.   for i := 0 to AList.Count - 1 do
  118.   begin
  119.     ATemp.Clear;
  120.     ATemp.Text := ReadFromRegistry('OpenWith', ExtractFileExt (AList.Strings[i]), '');
  121.  
  122.     for j := 0 to ATemp.Count - 1 do
  123.     begin
  124.       if CustomOpenWithPrograms.IndexOf (ATemp.Strings[j]) = -1 then
  125.         CustomOpenWithPrograms.Add (ATemp.Strings[j]);
  126.     end;
  127.   end;
  128.   ATemp.Free;
  129.  
  130.   if CustomOpenWithPrograms.Count > 0 then
  131.   begin
  132.     // now ask what program should be used to open the files with
  133.     AApp := AskApp (CustomOpenWithPrograms, AList, AParams);
  134.  
  135.     if AApp <> '' then
  136.     begin
  137.       //Say ('"' + AApp + '" ' + AParams);
  138.  
  139.       // start the selected application through the shell
  140.       ShellObj := CreateOleObject ('WScript.Shell');
  141.       // WshShell.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
  142.       result := ShellObj.Run('"' + AApp + '" ' + AParams, 1, True);
  143.       ShellObj := nil;
  144.  
  145.       //Say (result);
  146.     end;
  147.   end;
  148.  
  149.   CustomOpenWithPrograms.Free;
  150. end;
  151.  
  152. var
  153.   AFileList: TStringList;
  154.   ACatItem: TCatalogItem;
  155.   AVersions: TCatalogItems;
  156.   i, j: Integer;
  157. begin
  158.   AFileList := TStringList.Create;
  159.   AFileList.CaseSensitive := False;
  160.  
  161.   ACatItem  := TCatalogItem.Create (nil);
  162.   AVersions := TCatalogItems.Create (TCatalogItem, '');
  163.  
  164.   for i := 0 to Selected.Count - 1 do
  165.   begin
  166.     // find each selected image in catalog, and if it is a version, then return the main version
  167.     if Catalog.FindImageCombined (Selected.Items[i], ACatItem, True, phtNone) then
  168.     begin
  169.       AddFileName (AFileList, ACatItem.FileName);
  170.  
  171.       AVersions.Clear;
  172.  
  173.       Catalog.EnumVersionsForItem (ACatItem, AVersions);
  174.  
  175.       // populate all filenames to the file list, but check that they don't exist already (f.i. when two thumbs are selected from the same stack)
  176.       for j := 0 to AVersions.Count - 1 do
  177.         AddFileName (AFileList, AVersions.Items[j].FileName);
  178.     end;
  179.   end;
  180.  
  181.   AVersions.Free;
  182.   ACatItem.Free;
  183.  
  184.   if AFileList.Count = 0 then    // nothing added?? hmm, let's exit
  185.     exit;
  186.  
  187.   // now we have a list of files that should be used as parameters for the external application to open
  188.   DoOpenWith (AFileList);
  189.  
  190.   AFileList.Free;
  191. end;
  192.